class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     * 递增路径的最大长度
     * @param matrix int整型vector<vector<>> 描述矩阵的每个数
     * @return int整型
     */
    int n;
    int m;
    int ans = 1;//递增路径的长度至少也是1
    vector<vector<int>> dis = {{1,0},{-1,0},{0,1},{0,-1}};
    void dfs(vector<vector<int>>& matrix,vector<vector<int>>& isVisited,int x,int y,int count){
        isVisited[x][y] = 1;
        ans = max(ans,count);
        for(int i=0;i<4;i++){
            int next_x = x+dis[i][0];
            int next_y = y+dis[i][1];
            if(next_x<0||next_y<0||next_x>=n||next_y>=m){
                continue;//数组索引越界
            }
            if(matrix[next_x][next_y] > matrix[x][y]){
                dfs(matrix,isVisited,next_x,next_y,1+count);//1+count代表树的遍历加深了一层
            }
        }
        isVisited[x][y] = 0;//一定要还原现场，避免影响下一次dfs
    }

    int solve(vector<vector<int>>& matrix) {
        // write code here
        n = matrix.size();
        m = matrix[0].size();
        vector<vector<int>> isVisited(n,vector<int>(m,0));
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                dfs(matrix,isVisited,i,j,1);
            }
        }
        return ans;
    }
};